import redis.clients.jedis.Jedis;

/**
 * 五种数据类型的基本操作
 * Created by Administrator on 2017/6/13.
 */
public class BasicOperation {
    private static String host = "127.0.0.1";
    private static int port = 6379;

    public static void main(String[] args) {
        Jedis jedis = new Jedis(host, port);

        // 字符串get,set,del操作
        redisString(jedis);

        // 列表lpush,rpush,lpop,rpop,lrange,lindex操作
        redisList(jedis);

        // 集合sadd, smembers, sismember, srem操作
        redisSet(jedis);

        // 列表lpush,rpush,lindex,lrange操作
        redisHash(jedis);

        // 有序集合zadd, zrange, zrangebysocre, zrem操作
        redisZSet(jedis);
    }

    /**
     * 字符串类型的get，set，del操作
     * @param jedis
     */
    private static void redisString(Jedis jedis) {
        jedis.set("name", "gaoyang");
        System.out.println(jedis.get("name"));
        jedis.del("name");
        System.out.println(jedis.get("name")); // get不存在的key时返回null
    }

    /**
     * 列表类型的lpush,rpush,lindex,lrange操作
     * @param jedis
     */
    private static void redisList(Jedis jedis) {
        jedis.lpush("listKey", "left1");   // 返回列表当前长度
        jedis.rpush("listKey", "right1");
        jedis.lpush("listKey", "left2");
        System.out.println(jedis.lrange("listKey", 0, -1));   // 0开始，-1结束的位置表示所有元素
        System.out.println(jedis.lindex("listKey", 1));   // 获取列表指定位置的元素
        jedis.del("listKey");
    }

    /**
     * 集合类型的sadd,smembers,sismember,srem操作
     * @param jedis
     */
    private static void redisSet(Jedis jedis) {
        jedis.sadd("setKey", "item1");
        jedis.sadd("setKey", "item2", "item3");
        jedis.sadd("setKey", "item1");   // 已存在于集合中的元素返回0
        System.out.println(jedis.smembers("setKey"));   // 获取一个由元素组成的序列
        System.out.println(jedis.sismember("setKey", "item4"));   // 检查一个元素是否存在于集合中，返回布尔值
        jedis.srem("setKey", "item1");  // 返回被移除元素的数量
        jedis.del("setKey");
    }

    /**
     * 散列类型的hset, hget, hgetall, hdel操作
     * @param jedis
     */
    private static void redisHash(Jedis jedis) {
        jedis.hset("hashKey", "subKey1", "value1");
        jedis.hset("hashKey", "subKey2", "value2");
        jedis.hset("hashKey", "subKey1", "value1");   // 返回0表示该键值已存在
        System.out.println(jedis.hgetAll("hashKey"));   // 获取所有键值
        jedis.hdel("hashKey", "subKey1", "value1");   // 返回被删元素数量
        System.out.println(jedis.hget("hashKey", "subKey2"));   // 获取某个键的值
        jedis.del("hashKey");
    }

    /**
     * 有序集合zadd, zrange, zrangebyscore, zrem操作
     * @param jedis
     */
    private static void redisZSet(Jedis jedis) {
        jedis.zadd("zsetKey", 10, "member1");
        jedis.zadd("zsetKey", 500, "member2");
        jedis.zadd("zsetKey", 200, "member3");
        System.out.println(jedis.zrange("zsetKey", 0, -1));   // 获取按得分排序后的集合
        System.out.println(jedis.zrangeByScoreWithScores("zsetKey", 10, 200));   // 获取指定得分区间内的集合
        jedis.zrem("zsetKey", "member1");
        jedis.del("zsetKey");
    }
}
